﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Configuration;
using System.Data.SqlClient;
using Website.Logger;
using DAL;
using BOL;
using WebLib;
using EstandarControl;
using System.Web.Script.Services;
using System.Web.Services;
using System.IO;
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;
using UtilityExtensions;

namespace UILGestion.ObraAdmin.OrdenCompras
{
    public partial class OrdenCompraEditForm : System.Web.UI.Page
    {
        public OrdenCompraEditForm()
        {
            bol = new OrdenCompraBL();
           
            _db=new dbGestionDataContext(Parametros.strConnString);
        }

        private OrdenCompraBL bol;
        private  dbGestionDataContext _db;
       

        [WebMethod(), ScriptMethod()]
        public static string GetInsumo(String prefixText, String contextKey)
        {

            InsumoBL bol = new InsumoBL();
            return bol.getInsumoAll(prefixText, 30);

        }


        [WebMethod(), ScriptMethod()]
        public static string GetProveedor(String prefixText, String contextKey)
        {
            ProveedorBL bol = new ProveedorBL();
            return bol.getProveedorAll(prefixText, 20);
        }
        private void resetEmpty()
        {
            if (itemGridView.Rows.Count == 0)
            {
                List<OrdenCompraItemInfo> itemList0 = new List<OrdenCompraItemInfo>();
                OrdenCompraItemInfo itemcero = new OrdenCompraItemInfo();
                itemcero.idInternal = 0;
                itemList0.Add(itemcero);
                itemGridView.DataSource = itemList0;
                itemGridView.DataBind();
                itemGridView.Rows[0].Visible = false;
            }

        }

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                try
                {
                   
                    idObra.Value = (string)Request.QueryString["idObra"];
                    internalid.Value = (string)Request.QueryString["id"];
                    idComparativo.Value = (string)Request.QueryString["idComparativo"];
                    type.Value = (string)Request.QueryString["type"];
                    if (type.Value == "") { type.Value = "A"; }
                    menuObraCtrl1.loadMenu(int.Parse(idObra.Value), Request.AppRelativeCurrentExecutionFilePath);
                    

                    FormatForm();
                }
                catch (SqlException sqlex)
                {
                    WebServerSideSqlError.Log(sqlex);
                    ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                     "uniqueKey" + DateTime.Now, "alert('" + sqlex.Message.Replace("'", "") + "');", true);


                }
                catch (Exception ex)
                {
                    WebServerSideError.Log(ex);
                    ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                     "uniqueKey" + DateTime.Now, "alert('" + ex.Message.Replace("'", "") + "');", true);

                }

            }
        }
      

        
        private void verificarTipoCambio()
            {

                //(DD/MM/yyyy)
                System.IFormatProvider MiFp =
                    new System.Globalization.CultureInfo("es-ES", false);

                DateTime dt=DateTime.ParseExact(fechaTextBox.Text, "dd/MM/yyyy", MiFp);



                
                    Moneda moneda = DbUtil.Db.Monedas.Single(p => p.idInternal == int.Parse(monedaDDL.SelectedValue));
                    tipoCambioLabel.Text = moneda.getTipoCambio(DbUtil.Db, dt).ToString();
                
            }

        private void LoadOrdenCompra(OrdenCompra ordenCompra)
            {

                
                numDocumentoLabel.Text=ordenCompra.numDocumento;
                fechaTextBox.Text=ordenCompra.fechaEmision.Value.ToShortDateString();

                comparativoDDL.Enabled = false;

            
                simbol.Value = ordenCompra.Moneda1.simbol;


                ProveedorTXT.Text=ordenCompra.Proveedor1.descripcion;
                idproveedorTXT.Text = ordenCompra.idProveedor.ToString();
                rucTXT.Text = ordenCompra.Proveedor1.ruc;
                contactoTXT.Text=ordenCompra.Proveedor1.contacto;
                formaPagoDDL.SelectedValue=ordenCompra.idFormaPago.ToString();
                estructuraDDL.SelectedValue = ordenCompra.idEstructuraCompras.ToString();
                
            monedaDDL.SelectedValue=ordenCompra.idMoneda.ToString();
            
            tipoCambioLabel.Text=ordenCompra.tipoCambio.ToString();
                centroCostoLabel.Text=ordenCompra.centroCosto;
                fechaContratoTextBox.Text=ordenCompra.fechaContrato.Value.ToShortDateString();
                fechaEntregaTextBox.Text=ordenCompra.fechaPedido.Value.ToShortDateString();
                observacionTextBox.Text=ordenCompra.observaciones;
                centroCostoLabel.Text = ordenCompra.centroCosto;

                subTotalTextBox.Text=ordenCompra.subTotal.Value.ToString("N2");
                IGVLabel.Text=ordenCompra.IGVTotal.Value.ToString("N2");
                totalLabel.Text=ordenCompra.total.Value.ToString("N2");

                idComparativo.Value = ordenCompra.idComparativo.ToString();

                atencionLabel.Text = ordenCompra.Obra.responsableEntrega;
                direccionComprabanteLabel.Text = ordenCompra.Obra.direccionFacturacion;
                direccionEntregaLabel.Text = ordenCompra.Obra.direcccionEntrega;

                IGVCheckBox.Checked = ordenCompra.Obra.incluyeIGV.Value;


               // comparativoDDL.SelectedValue = (ordenCompra.idComparativo != null) ? ordenCompra.idComparativo.ToString() : "0"; ;

                comparativoLinkButton.Text = (ordenCompra.idComparativo != null) ? ordenCompra.Comparativo.numDocumento + "-" + ordenCompra.Comparativo.descripcion : "";
                comparativoLinkButton.NavigateUrl = (ordenCompra.idComparativo != null) ?
                "../Comparativos/ComparativoReadForm.aspx?idObra={0}&id={1}".Fmt(ordenCompra.idObra, ordenCompra.idComparativo) :
                "";

                    AddRecursos.Visible = false;
                    if (ordenCompra.idComparativo != null)
                        {
                        SaldoComparativoLabel.Text = string.Format("{0} {1:N}", ordenCompra.Moneda1.simbol,
                                                    (ordenCompra.ComparativoProveedor.totalContratado.Value -
                                                    ordenCompra.ComparativoProveedor.totalUso.Value).ToString("N"));
                        AddRecursos.Visible = true;
                        Activarcontrol(false);

                    }


                    DataTable empleadoObraList = Util.EntidadToDataTable(bol.getOrdenCompraItem(DbUtil.Db, int.Parse(internalid.Value)));
                    DataSet ds = new DataSet();


                    empleadoObraList.TableName = bol.ORDENCOMPRAITEMINFO;


                    ds.Tables.Add(empleadoObraList);
                    ds.AcceptChanges();

                    Session[idobjectdsLabel.Value] = ds;
            }

        private void ShowAllComboBox()
        {
            var listas= new  ListValueBL();

            formaPagoDDL.DataValueField = "idInternal";
            formaPagoDDL.DataTextField = "descripcion";
            formaPagoDDL.DataSource = listas.GetFormaPago();
            formaPagoDDL.DataBind();

            estructuraDDL.DataValueField = "idInternal";
            estructuraDDL.DataTextField = "descripcion";
            estructuraDDL.DataSource = listas.GetEstructuraCompras(idObra.Value.ToInt());
            estructuraDDL.DataBind();

            monedaDDL.DataValueField = "idInternal";
            monedaDDL.DataTextField = "descripcion";
            monedaDDL.DataSource = listas.GetMoneda();
            monedaDDL.DataBind();

            comparativoDDL.Items.Clear();

       

                List<ListValueInfo> cL = new List<ListValueInfo>();
                ListValueInfo comparativocero = new ListValueInfo();
                comparativocero.descripcion = "------Orden Compra Sin Comparativo---------";
                comparativocero.idInternal = 0;

                    


                cL.Add(comparativocero);
                cL.AddRange(listas.GetComparativosDispToOrdenCompraList(int.Parse(idObra.Value)));

                comparativoDDL.DataTextField = "descripcion";
                comparativoDDL.DataValueField = "idInternal";

                comparativoDDL.DataSource = cL;
                comparativoDDL.DataBind();


                GrupoDatoitem IGV = _db.GrupoDatoitems.Single(p => p.idInternal == 10);
                Obra obra = _db.Obras.Single(p => p.idInternal == int.Parse(idObra.Value));


                atencionLabel.Text = obra.responsableEntrega;
                direccionComprabanteLabel.Text = obra.direccionFacturacion;
                direccionEntregaLabel.Text = obra.direcccionEntrega;


                IGVCheckBox.Checked = obra.incluyeIGV.Value;
                IGVvalorLabel.Text = IGV.descripcion;


                
        }

        private void FormatForm()
        {
            //--------------------
            int idEmpleadoEmisor = int.Parse(System.Web.HttpContext.Current.Session["idEmpleado"].ToString());
            bool acceso = new DAL.FormularioAcceso().VerificarAcceso(DbUtil.Db,
                idEmpleadoEmisor,
                3, //orden Compra
                int.Parse(idObra.Value),
                2); //lectura
            //------------------------- 
            // los paneles presentes en el formulario
            pnlMain.Visible = true;
            PanelBody.Visible = true;
            PanelButtom.Visible = true;

            //-----------------------------
            fechaTextBox.Text = DateTime.Now.ToShortDateString();
            fechaEntregaTextBox.Text = DateTime.Now.ToShortDateString();
            fechaContratoTextBox.Text = DateTime.Now.ToShortDateString();
            
            idobjectdsLabel.Value = Parametros.GenerarID().ToString();
            ShowAllComboBox();

             if (type.Value == "E")
             {
                 titulo.Text = "EDITAR ORDEN DE COMPRA";
                 OrdenCompra ordenCompra = DbUtil.Db.OrdenCompras.Single(p => p.idInternal == internalid.Value.ToInt());
                 LoadOrdenCompra(ordenCompra);
                 verificarTipoCambio();
                 
                 BindDataitem();
                 SetTotales();

             }
             else
             {
                 titulo.Text = "NUEVA ORDEN DE COMPRA";

                 if (idComparativo.Value.ToInt() != 0)
                 {
                     LoadComparativo(idComparativo.Value.ToInt());
                     Activarcontrol(false);
                     AddRecursos.Visible = true;
                 }
                 else
                 {

                     ClearControl();
                     AddRecursos.Visible = false;
                 }
                    
                    BindDataitem();
                    SetTotales();
                    verificarTipoCambio();

             }
             string idEC = (string)Request.QueryString["idEC"];
             if (idEC.HasValue())
             {
                 estructuraDDL.SelectedValue = idEC;
             }

            
        }

        private void ClearControl()
        {
            Activarcontrol(true);
            //mostrar controles de agregacion
            ProveedorTXT.Text = string.Empty;
            idproveedorTXT.Text = string.Empty;
            contactoTXT.Text = string.Empty;
            rucTXT.Text = string.Empty;
            comparativoLinkButton.Text = string.Empty;
            SaldoComparativoLabel.Text = string.Empty;

            DataTable dtList = Util.EntidadToDataTable(bol.getOrdenCompraItem(DbUtil.Db,internalid.Value.ToInt()));
            DataSet ds = new DataSet();

            dtList.TableName = bol.ORDENCOMPRAITEMINFO;


            ds.Tables.Add(dtList);
            ds.AcceptChanges();

            Session[idobjectdsLabel.Value] = ds;
        }

        private void Activarcontrol(bool activar)
        {
            ProveedorTXT.Enabled = activar;
            contactoTXT.Enabled = activar;
            formaPagoDDL.Enabled = activar;
            estructuraDDL.Enabled = activar;
            monedaDDL.Enabled = activar;
        }

       
        protected void btnSaveContinue_Click(object sender, EventArgs e)
        {
            System.IFormatProvider MiFp =new System.Globalization.CultureInfo("es-ES", false);
            try
            {
                if ((sender as System.Web.UI.WebControls.Button).Text == cancelarButton.Text)
                {
                    Response.Redirect("OrdenCompraListForm.aspx?idObra=" + idObra.Value,true);
                }

                if ((sender as System.Web.UI.WebControls.Button).Text == saveButton.Text)
                {
                    // generar un  dataset para enviar al presupuesto;
                    DataSet dsRecurso = (DataSet)Session[idobjectdsLabel.Value.ToString()];
                   
                    OrdenCompraBL bol = new OrdenCompraBL();
                    if (type.Value == "E")
                    {
                        bol.UpdateCompra(internalid.Value.ToInt(),
                                              idproveedorTXT.Text.ToInt(),
                                              fechaTextBox.Text.ToDate().Value,
                                              fechaContratoTextBox.Text.ToDate().Value,
                                              fechaEntregaTextBox.Text.ToDate().Value,
                                              formaPagoDDL.SelectedValue.ToInt(),
                                              monedaDDL.SelectedValue.ToInt(),
                                              monedaDDL.SelectedItem.Text,
                                              idComparativo.Value.ToInt()!=0?idComparativo.Value.ToInt2():null,
                                              IGVCheckBox.Checked,
                                              decimal.Parse(IGVvalorLabel.Text) / 100,
                                              observacionTextBox.Text,
                                              centroCostoLabel.Text,
                                              estructuraDDL.SelectedValue.ToInt(),
                                              direccionEntregaLabel.Text,
                                              atencionLabel.Text,
                                             direccionComprabanteLabel.Text,
                                             bitAnticipoChk.Checked,
                                             observacionInternaTXT.Text,
                                             dsRecurso
                                             );
                    }
                    if (type.Value == "A")
                    {

                        int? idComparativo=comparativoDDL.SelectedValue.ToInt();
                        
                        internalid.Value = bol.addCompra( _db,
                                                  idComparativoProveedor.Value.ToInt2(),
                                                  idproveedorTXT.Text.ToInt(),
                                                  DateTime.ParseExact(fechaTextBox.Text, "dd/MM/yyyy", MiFp),
                                                  DateTime.ParseExact(fechaContratoTextBox.Text, "dd/MM/yyyy", MiFp),
                                                  DateTime.ParseExact(fechaEntregaTextBox.Text, "dd/MM/yyyy", MiFp),
                                                  formaPagoDDL.SelectedValue.ToInt(),
                                                  monedaDDL.SelectedValue.ToInt(),
                                                  monedaDDL.SelectedItem.Text,
                                                  (idComparativo==0?null:idComparativo),
                                                  IGVCheckBox.Checked,
                                                  decimal.Parse(IGVvalorLabel.Text) / 100,
                                                  observacionTextBox.Text,
                                                  int.Parse(idObra.Value),
                                                  centroCostoLabel.Text,
                                                  estructuraDDL.SelectedValue.ToInt(),
                                                  direccionEntregaLabel.Text,
                                                  atencionLabel.Text,
                                                  direccionComprabanteLabel.Text,
                                                  bitAnticipoChk.Checked,
                                                  observacionInternaTXT.Text,
                                                  dsRecurso
                                                  ).ToString();
                       
                    }
                    Session[idobjectdsLabel.Value.ToString()] = null;
                    Response.Redirect("OrdenCompraReadForm.aspx?idObra=" + idObra.Value + "&id=" + internalid.Value.ToString(), true);


                }

                if ((sender as System.Web.UI.WebControls.Button).Text == "Cancelar")
                {
                    //     ds = (DataSet)Session[idobjectdsLabel.Text.ToString()];
                    //     ds.RejectChanges();

                    string script = "<script languaje=\"javascript\">" +
               "window.close();" +
               "</script>";
                    ClientScript.RegisterStartupScript(
                        this.GetType(), "Registro Aceptacion", script);


                }

            }
            catch (SqlException sqlex)
            {
                WebServerSideSqlError.Log(sqlex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + sqlex.Message.Replace("'", "") + "');", true);


            }
            catch (Exception ex)
            {
                WebServerSideError.Log(ex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + ex.Message.Replace("'", "") + "');", true);

            }




        }
        protected void refreshButton_Click(object sender, EventArgs e)
        {
            try
            {
                FormatForm();
            }
            catch (SqlException sqlex)
            {
                WebServerSideSqlError.Log(sqlex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + sqlex.Message.Replace("'", "") + "');", true);


            }
            catch (Exception ex)
            {
                WebServerSideError.Log(ex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + ex.Message.Replace("'", "") + "');", true);

            }
        }
        #region "item"

        protected void AddItem(object sender, EventArgs e)
        {
            try
            {

                decimal IGVvalor = decimal.Parse(IGVvalorLabel.Text);

                TextBox codigoTXT = ((TextBox)itemGridView.FooterRow.FindControl("codigoTXT"));
                TextBox cantidadTextBox = ((TextBox)itemGridView.FooterRow.FindControl("cantidadInsertTextBox"));
                TextBox precioIGVETextBox = ((TextBox)itemGridView.FooterRow.FindControl("precioIGVInsertTextBox"));
                TextBox precioTextBox = ((TextBox)itemGridView.FooterRow.FindControl("precioInsertTextBox"));
                TextBox subMontoTextBox = ((TextBox)itemGridView.FooterRow.FindControl("subMontoInsertTextBox"));
                TextBox subMontoIGVTextBox = ((TextBox)itemGridView.FooterRow.FindControl("subMontoIGVInsertTextBox"));

                DAL.Insumo insumo = DbUtil.Db.Insumos.Single(p => p.codigo == codigoTXT.Text.Trim());

                DataSet lista =(DataSet)Session[idobjectdsLabel.Value];

                ////si incluye iGV
                //if (!IGVCheckBox.Checked)
                //{
                //       decimal subTotalIGV= subMontoTextBox.Text.ToDecimal().Value * (1 + (IGVvalor / 100));
                //        //calculamos los que quedan
                //        precioIGVETextBox.Text = (subTotalIGV/cantidadTextBox.Text.ToDecimal().Value).ToString();
                //        subMontoIGVTextBox.Text = subTotalIGV.ToString();
                //}
                //else
                //{
                //    decimal subTotal = subMontoIGVTextBox.Text.ToDecimal().Value / (1 + IGVvalor / 100);
                //    //calculamos los que quedan
                //    precioTextBox.Text = (subTotal / cantidadTextBox.Text.ToDecimal().Value).ToString();
                //    subMontoTextBox.Text = subTotal.ToString();
                //}

                //var ordenCompraItemInfo = new OrdenCompraItemInfo(Parametros.GenerarID(),
                //                                                  insumo.idInternal,
                //                                                  0,
                //                                                  insumo.descripcion,
                //                                                  insumo.InsumoUnidad.abreviacion,
                //                                                  insumo.codigo,
                //                                                  0,
                //                                                  true,
                //                                                  cantidadTextBox.Text.ToDecimal().Value,
                //                                                  subMontoTextBox.Text.ToDecimal().Value,
                //                                                  subMontoIGVTextBox.Text.ToDecimal().Value,
                //                                                  precioIGVETextBox.Text.ToDecimal().Value,
                //                                                  precioTextBox.Text.ToDecimal().Value,
                //                                                  IGVvalor,
                //                                                  0);

                var ordenCompraItemInfo = bol.GetOrdenCompraItemFromValor(_db,insumo.idInternal,
                                                                   cantidadTextBox.Text.ToDecimal().Value,
                                                                    IGVvalor,
                                                                    IGVCheckBox.Checked,
                                                                    true,//oc siempre calcula el IGV
                                                                    IGVCheckBox.Checked == true ? precioIGVETextBox.Text.ToDecimal().Value :
                                                                                               precioTextBox.Text.ToDecimal().Value,
                                                                    IGVCheckBox.Checked == true ? subMontoIGVTextBox.Text.ToDecimal().Value :
                                                                                               subMontoTextBox.Text.ToDecimal().Value);


                lista.Tables[bol.ORDENCOMPRAITEMINFO].ImportRow(Util.EntidadToDataRow(ordenCompraItemInfo));                   
                Session[idobjectdsLabel.Value.ToString()] = lista;

                BindDataitem();
                SetTotales();

            }
            catch (SqlException sqlex)
            {
                WebServerSideSqlError.Log(sqlex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + sqlex.Message.Replace("'", "") + "');", true);


            }
            catch (Exception ex)
            {
                WebServerSideError.Log(ex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + ex.Message.Replace("'", "") + "');", true);

            }

        }

        private void SetTotales()
        {
            totalLabel.Text = String.Format("{0} {1:N}", simbol.Value, 0m);

            IGVLabel.Text = String.Format("{0} {1:N}", simbol.Value, 0m);

            subTotalTextBox.Text = String.Format("{0} {1:N}", simbol.Value, 0m);
            DataSet OCI = (DataSet)Session[idobjectdsLabel.Value];
            var row = OCI.Tables[bol.ORDENCOMPRAITEMINFO].AsEnumerable().Where(p => p.RowState != DataRowState.Deleted);
           
            if (row.Count() > 0)
            {
               

                totalLabel.Text =string.Format("{0} {1:N}",
                    simbol.Value,
                    row.Sum(p => p.Field<decimal>("subMontoIGV")));
                IGVLabel.Text = String.Format("{0} {1:N}",
                    simbol.Value,
                    row.Sum(p => p.Field<decimal>("IGVItem")));
                subTotalTextBox.Text = String.Format("{0} {1:N}",
                    simbol.Value,
                    row.Sum(p => p.Field<decimal>("subMonto")));
            }
           
            panelTotal.Update();
        }

        private void SetEditItem(int i)
        {
            //cargamos los valores de disponible/combos

            //int idInternal = ((GridView)itemGridView).DataKeys[i].Values[0].ToInt();
            //TextBox cantidadDispTextBox = ((TextBox)itemGridView.Rows[i].FindControl("cantidadDispTextBox"));
            //TextBox subMontoDispEditTextBox = ((TextBox)itemGridView.Rows[i].FindControl("subMontoDispEditTextBox"));
            //TextBox subMontoIGVDispEditTextBox = ((TextBox)itemGridView.Rows[i].FindControl("subMontoIGVDispEditTextBox"));

            //OrdenCompraItem ocitem = DbUtil.Db.OrdenCompraItems.Single(p => p.idInternal == idInternal);

            //cantidadDispTextBox.Text = ocitem.GetCantidadDispWithOUT(DbUtil.Db).ToString("N");
            //subMontoDispEditTextBox.Text = ocitem.GetMontoDispNOIGVIGVWithOUT(DbUtil.Db).ToString("N");
            //subMontoIGVDispEditTextBox.Text = ocitem.GetMontoDispINCLIGVWithOUT(DbUtil.Db).ToString("N");

        }

        protected void Deleteitem(object sender, EventArgs e)
        {
            try
            {

                System.Web.UI.WebControls.ImageButton lnkRemove = (System.Web.UI.WebControls.ImageButton)sender;
                DataSet lista =
                        (DataSet)Session[idobjectdsLabel.Value];

                var dataRow = (from a in lista.Tables[bol.ORDENCOMPRAITEMINFO].AsEnumerable().Where(p => p.RowState != DataRowState.Deleted)
                               where a.Field<int>("idInternal") == int.Parse(lnkRemove.CommandArgument.ToString())
                               select a).First();

                dataRow.Delete();
                //eRolList.Tables[1].Rows.Remove(drw);

                Session[idobjectdsLabel.Value.ToString()] = lista;

                BindDataitem();
                SetTotales();

            }
            catch (SqlException sqlex)
            {
                WebServerSideSqlError.Log(sqlex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + sqlex.Message.Replace("'", "") + "');", true);


            }
            catch (Exception ex)
            {
                WebServerSideError.Log(ex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + ex.Message.Replace("'", "") + "');", true);

            }

        }
        protected void EditItem(object sender, GridViewEditEventArgs e)
        {
            try
            {
                itemGridView.EditIndex = e.NewEditIndex;

                int parent_index = e.NewEditIndex;

                
                BindDataitem();
                SetEditItem(e.NewEditIndex);
                
                //itemGridView.FooterRow.Visible = false;

            }
            catch (SqlException sqlex)
            {
                WebServerSideSqlError.Log(sqlex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + sqlex.Message.Replace("'", "") + "');", true);


            }
            catch (Exception ex)
            {
                WebServerSideError.Log(ex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + ex.Message.Replace("'", "") + "');", true);

            }

        }
        protected void OnPaging(object sender, GridViewPageEventArgs e)
        {
            //BindData();
            //GridView1.PageIndex = e.NewPageIndex;
            //GridView1.DataBind();
        }

        protected void CancelEditItem(object sender, GridViewCancelEditEventArgs e)
        {
            try
            {
                itemGridView.EditIndex = -1;
                BindDataitem();
                //itemGridView.FooterRow.Visible = true;
            }
            catch (SqlException sqlex)
            {
                WebServerSideSqlError.Log(sqlex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + sqlex.Message.Replace("'", "") + "');", true);


            }
            catch (Exception ex)
            {
                WebServerSideError.Log(ex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + ex.Message.Replace("'", "") + "');", true);

            }

        }
        protected void UpdateItem(object sender, GridViewUpdateEventArgs e)
        {
            try
            {
                decimal IGVvalor = decimal.Parse(IGVvalorLabel.Text) ;

                string idInternal = ((GridView)sender).DataKeys[e.RowIndex].Values[0].ToString();
                string descripcion = ((System.Web.UI.WebControls.TextBox)itemGridView.Rows[e.RowIndex].FindControl("descripcionEditTextBox")).Text;
                string cantidad = ((System.Web.UI.WebControls.TextBox)itemGridView.Rows[e.RowIndex].FindControl("cantidadEditTextBox")).Text;
                string precioIGV = ((System.Web.UI.WebControls.TextBox)itemGridView.Rows[e.RowIndex].FindControl("precioIGVEditTextBox")).Text;
                string precioNOIGV = ((System.Web.UI.WebControls.TextBox)itemGridView.Rows[e.RowIndex].FindControl("precioEditTextBox")).Text;

                string subMonto = ((System.Web.UI.WebControls.TextBox)itemGridView.Rows[e.RowIndex].FindControl("subMontoEditTextBox")).Text;
                string subMontoIGV = ((System.Web.UI.WebControls.TextBox)itemGridView.Rows[e.RowIndex].FindControl("subMontoIGVEditTextBox")).Text;

                DataSet lista =
               (DataSet)Session[idobjectdsLabel.Value];


                var dataRow = (from a in lista.Tables[bol.ORDENCOMPRAITEMINFO].AsEnumerable().Where(p => p.RowState != DataRowState.Deleted)
                            where a.Field<int>("idInternal") == idInternal.ToInt()
                            select a).First();



                ////si incluye iGV
                //if (!IGVCheckBox.Checked)
                //{
                //    decimal subTotalIGV = subMontoTextBox.Text.ToDecimal().Value * (1 + (IGVvalor / 100));
                //    //calculamos los que quedan
                //    precioIGVETextBox.Text = (subTotalIGV / cantidadTextBox.Text.ToDecimal().Value).ToString();
                //    subMontoIGVTextBox.Text = subTotalIGV.ToString();
                //}
                //else
                //{
                //    decimal subTotal = subMontoIGVTextBox.Text.ToDecimal().Value / (1 + IGVvalor / 100);
                //    //calculamos los que quedan
                //    precioTextBox.Text = (subTotal / cantidadTextBox.Text.ToDecimal().Value).ToString();
                //    subMontoTextBox.Text = subTotal.ToString();
                //}


                OrdenCompraItemInfo item =                   
                    
                    (OrdenCompraItemInfo)Util.DataRowToEntidad(dataRow, new OrdenCompraItemInfo().GetType());

                item.SetTotales(cantidad.ToDecimal().Value,
                                precioIGV.ToDecimal().Value,
                                precioNOIGV.ToDecimal().Value,
                                subMontoIGV.ToDecimal().Value,
                                subMonto.ToDecimal().Value,
                                IGVvalor,
                                IGVCheckBox.Checked);



                Util.EntidadUpdateDataRow(item, dataRow);

                Session[idobjectdsLabel.Value.ToString()] = lista;
                
                itemGridView.EditIndex = -1;
                BindDataitem();
                SetTotales();

            }
            catch (SqlException sqlex)
            {
                WebServerSideSqlError.Log(sqlex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + sqlex.Message.Replace("'", "") + "');", true);


            }
            catch (Exception ex)
            {
                WebServerSideError.Log(ex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + ex.Message.Replace("'", "") + "');", true);

            }

        }
     
        private void BindDataitem()
        {

         
            DataSet recursoList = (DataSet)Session[idobjectdsLabel.Value];

            int total = itemGridView.Columns.Count;
            if (idComparativo.Value.ToInt() == 0)
                itemGridView.Columns[total-2].Visible = false;
            else
                itemGridView.Columns[total - 2].Visible = true;

             //caso de incluido el IGV
            if (IGVCheckBox.Checked)
            {
                itemGridView.Columns[4].Visible = false; //PRECIO NO igv
                itemGridView.Columns[6].Visible = false;

                itemGridView.Columns[5].Visible = true; //igv  precio incl
                itemGridView.Columns[7].Visible = true;
            }
            else
            {
                itemGridView.Columns[4].Visible = true;
                itemGridView.Columns[6].Visible = true;

                itemGridView.Columns[5].Visible = false;
                itemGridView.Columns[7].Visible = false;
            }
            itemGridView.DataSource = recursoList.Tables[bol.ORDENCOMPRAITEMINFO]; ;

            if (idComparativo.Value.ToInt() == 0)
                itemGridView.ShowFooter = true;
            else
                itemGridView.ShowFooter = false;




            comparativoDDL.Enabled = true;
            var w = recursoList.Tables[bol.ORDENCOMPRAITEMINFO].AsEnumerable().
                            Where(p => p.RowState != DataRowState.Deleted).Count();
            if (w > 0)
            {
                comparativoDDL.Enabled = false;
            }
            itemGridView.DataBind();
            resetEmpty();
            itemUpdatePanel.Update();


        }

        #endregion

        
        protected void AddRecursos_Click(object sender, EventArgs e)
        {
            try
            {

                    DataSet recursoList = (DataSet)Session[idobjectdsLabel.Value];


                    List<int> Yautilizado = recursoList.Tables[bol.ORDENCOMPRAITEMINFO].AsEnumerable().
                                        Where(p=>p.RowState!=DataRowState.Deleted).
                                        Select(p=>p.Field<int>("idComparativoItemSelecPrv")).ToList();


                List<int> ListOrdenCompraEliminados = new List<int>();
                DataSet  dsDiferencias = new DataSet();

                if (recursoList.HasChanges())
                {
                    dsDiferencias.Merge(recursoList.GetChanges());

                    foreach (DataRow drw in dsDiferencias.Tables[bol.ORDENCOMPRAITEMINFO].Rows)
                    {
                        if (drw.RowState == DataRowState.Deleted)
                        {
                            drw.RejectChanges();

                            ListOrdenCompraEliminados.Add(drw.Field<int>("idInternal"));
                        }
                    }
                }



                ComparativoItemSeleccionPanel1.LoadRecurso(bol, 
                                                        idComparativo.Value.ToInt(),
                                                        IGVvalorLabel.Text.ToDecimal().Value,
                                                        IGVCheckBox.Checked,
                                                        idComparativoProveedor.Value.ToInt(),
                                                        Yautilizado,
                                                        ListOrdenCompraEliminados);
                ModalAddPopupExtender.Show();

            }
            catch (SqlException sqlex)
            {
                WebServerSideSqlError.Log(sqlex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + sqlex.Message.Replace("'", "") + "');", true);


            }
            catch (Exception ex)
            {
                WebServerSideError.Log(ex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + ex.Message.Replace("'", "") + "');", true);

            }
        }

        protected void AddRecurso(object sender, EventArgs e)
        {
            try
            {
                List<OrdenCompraItemInfo> listaItem = ComparativoItemSeleccionPanel1.ItemLista;
                DataSet ds = (DataSet)Session[idobjectdsLabel.Value];

                foreach (var item in listaItem)
                {

                    ds.Tables[bol.ORDENCOMPRAITEMINFO].ImportRow(Util.EntidadToDataRow(item));
                }
                Session[idobjectdsLabel.Value] = ds;
                BindDataitem();
                ModalAddPopupExtender.Hide();
                SetTotales();

            }
            catch (SqlException sqlex)
            {
                WebServerSideSqlError.Log(sqlex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + sqlex.Message.Replace("'", "") + "');", true);


            }
            catch (Exception ex)
            {
                WebServerSideError.Log(ex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + ex.Message.Replace("'", "") + "');", true);

            }

            
        }
        private void LoadComparativo(int idComparativo)
        {
            // carga desde comparativo

            emisorLabel.Text = ((String)Session["login.Empleado.descripcion"]).ToUpper();



            OrdenCompraBL bl = new OrdenCompraBL();

            OrdenCompraInsertInfo ordenCompra = bl.loadOrdenCompraFromComparativo(idComparativo);
            simbol.Value = DbUtil.Db.Monedas.Single(p => p.idInternal == ordenCompra.idMoneda).simbol;

            // idProveedor.Value = ordenCompra.idProveedor.ToString();
            idObra.Value = ordenCompra.idObra.ToString();
            idproveedorTXT.Text = ordenCompra.idProveedor.ToString();
            ProveedorTXT.Text = ordenCompra.proveedor;
            Proveedor1TXT.Text = ordenCompra.proveedor;
            rucTXT.Text = ordenCompra.proveedor;
            contactoTXT.Text = ordenCompra.contacProveedor;
            tipoCambioLabel.Text = Convert.ToString(ordenCompra.tipoCambio);

            comparativoDDL.SelectedValue = ordenCompra.idComparativo.ToString();
            monedaDDL.SelectedValue = ordenCompra.idMoneda.ToString();
            

            formaPagoDDL.SelectedValue= ordenCompra.idFormaPago.ToString();
            tipoCambioLabel.Text = ordenCompra.tipoCambio.ToString();
            idproveedorTXT.Text= ordenCompra.idProveedor.ToString();
            idComparativoProveedor.Value = ordenCompra.idComparativoProveedor.ToString();
            numDocumentoLabel.Text = ordenCompra.numDocumento;
            fechaContratoTextBox.Text = ordenCompra.fechaComparativo.ToShortDateString();
            //carga en los controles ds
            //idproveedor seleccionado es quien figura en comparativoproveedor id

            contactoTXT.Text = ordenCompra.contacProveedor;
            SaldoComparativoLabel.Text = ordenCompra.saldoComparativo;
            centroCostoLabel.Text = ordenCompra.centroCosto;
            estructuraDDL.SelectedValue= ordenCompra.idEstructura.ToString();
            

            comparativoLinkButton.Text = ordenCompra.desComparativo;
            comparativoLinkButton.NavigateUrl =
                String.Format("../Comparativos/ComparativoReadForm.aspx?idObra={0}&id={1}",
                int.Parse(idObra.Value),
                ordenCompra.idComparativo.ToString());
            int idEmpleado = ((int)Session["idEmpleado"]);
            numDocumentoLabel.Enabled = false;
            if (idEmpleado == 32)
            {
                numDocumentoLabel.Enabled = true;
            }



            DataTable empleadoObraList = Util.EntidadToDataTable(bol.getOrdenCompraItem(DbUtil.Db, internalid.Value.ToInt()));
            DataSet ds = new DataSet();




            empleadoObraList.TableName = bol.ORDENCOMPRAITEMINFO;


            ds.Tables.Add(empleadoObraList);
            ds.AcceptChanges();

            Session[idobjectdsLabel.Value] = ds;


        }
        protected void CalcularIGVCheckBox_CheckedChanged(object sender, EventArgs e)
        {
            SetTotales();

            //if (CalcularIGVCheckBox.Checked)
            //{
            //    ////recorriendo la lista de Insumos 
            //    //OrdenCompraItemInfo recurso = new OrdenCompraItemInfo();

            //    //List<OrdenCompraItemInfo> recursoList =
            //    //    (List<OrdenCompraItemInfo>)Session[idobjectdsLabel.Value.ToString()];

            //    //foreach (var item in recursoList)
            //    //{
            //    //    colocamos el IGV

            //    //}

            //}
            //else
            //{

            //}
        }       
     
        protected void comparativoDDL_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {

            
                if (((DropDownList)sender).Items.Count > 0)
                {
                    idComparativo.Value = ((DropDownList)sender).SelectedValue;
                    if (idComparativo.Value != "0")
                    {
                        LoadComparativo(int.Parse(idComparativo.Value));
                        BindDataitem();
                        Activarcontrol(false);
                        SetTotales();
                        AddRecursos.Visible = true;
                    }
                    else
                    {
                        ClearControl();
                        Activarcontrol(true);
                        BindDataitem();
                        SetTotales();
                        AddRecursos.Visible = false;
                    }               
                }


            }
            catch (Exception)
            {

                throw;
            }
        }


        protected void monedaDDL_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {


                if (((DropDownList)sender).Items.Count > 0)
                {
                   string idMoenda= ((DropDownList)sender).SelectedValue;
                   simbol.Value = DbUtil.Db.Monedas.Single(p => p.idInternal == idMoenda.ToInt()).simbol;
                    SetTotales();
                    
                }


            }
            catch (Exception)
            {

                throw;
            }
        }



    }
}